﻿#ifndef LANE_MANAGER_H_
#define LANE_MANAGER_H_

// event
#include "lane_def.h"

/**
*  @b Description
*  @n
*     生成新车道
*  @param[in] road
*		指向道路拓扑结构的指针
*  @param[in] roadNums
*		生成车道的个数
*  @param[in] baseCurve
*		指向曲线控制点的指针
*  @param[in] curve_number
*       曲线的个数
*  @param[in] width
*       车道宽度
*  @param[in] insertDirection
*        车道生成方向
*  @retval
*      None
*/
void road_add_lane(RoadTopology* road, uint8_t roadNums, const BezierCurve* baseCurve, uint8_t curve_number, float width, InsertDirection insertDirection);

/**
*  @b Description
*  @n
*     调整指定车道宽度
*  @param[in] road
*		指向道路拓扑结构的指针
*  @param[in] lane_id
*		车道id
*  @param[in] new_width
*		新的车道宽度
*  @retval
*      None
*/
void road_adjust_width(RoadTopology* road, uint8_t lane_id, float new_width);

// 指定位置插入车道
//void road_insert_lane(RoadTopology* road, uint8_t ref_lane_id, bool insert_to_right, float width);

/**
*  @b Description
*  @n
*     获取最左侧车道
*  @param[in] road
*		指向道路拓扑结构的指针
*  @retval
*      对应车道ID
*/
int8_t get_leftmost_lane(const RoadTopology* road);

/**
*  @b Description
*  @n
*     获取最右侧车道
*  @param[in] road
*		指向道路拓扑结构的指针
*  @retval
*      对应车道ID
*/
int8_t get_rightmost_lane(const RoadTopology* road);

/**
*  @b Description
*  @n
*     曲率计算器
*  @param[in] p0
*		贝塞尔曲线起点
*  @param[in] p1
*		贝塞尔曲线控制点
*  @param[in] p2
*		贝塞尔曲线终点
*  @param[in] t
*		贝塞尔曲线参数t
*  @retval
*      曲率值
*/
float bezier_curvature(Point2D p0, Point2D p1, Point2D p2, float t);
#endif // LANE_MANAGER_H
